﻿// 关键词搜索.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using  namespace std;


/*


原题来自：HDU 2222
http://ybt.ssoier.cn:8088/problem_show.php?pid=1479
给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询，以及一篇长为 m 的文章，问：文中出现了多少个待查询的单词。多组数据。

【输入】
第一行一个整数 T，表示数据组数；

对于每组数据，第一行一个整数 n，接下去 n 行表示 n 个单词，最后一行输入一个字符串，表示文章。

【输出】
对于每组数据，输出一个数，表示文中出现了多少个待查询的单词。

【输入样例】
1
5
she
he
say
shr
her
yasherhs
【输出样例】
3
【提示】
数据范围：

对于全部数据，1≤n≤104,1≤m≤106​​ 。
*/




/*
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 10010, S = 55, M = 1000010;

int n;
int tr[N * S][26], cnt[N * S], idx;
char str[M];
int q[N * S], ne[N * S];

void insert()
{
	int p = 0;
	for (int i = 0; str[i]; i ++ )
	{
		int t = str[i] - 'a';
		if (!tr[p][t]) tr[p][t] = ++ idx;
		p = tr[p][t];
	}
	cnt[p] ++ ;
}

void build()
{
	int hh = 0, tt = -1;
	for (int i = 0; i < 26; i ++ )
		if (tr[0][i])
			q[ ++ tt] = tr[0][i];

	while (hh <= tt)
	{
		int t = q[hh ++ ];
		for (int i = 0; i < 26; i ++ )
		{
			int p = tr[t][i];
			if (!p) tr[t][i] = tr[ne[t]][i];
			else
			{
				ne[p] = tr[ne[t]][i];
				q[ ++ tt] = p;
			}
		}
	}
}

int main()
{
	int T;
	scanf("%d", &T);
	while (T -- )
	{
		memset(tr, 0, sizeof tr);
		memset(cnt, 0, sizeof cnt);
		memset(ne, 0, sizeof ne);
		idx = 0;

		scanf("%d", &n);
		for (int i = 0; i < n; i ++ )
		{
			scanf("%s", str);
			insert();
		}

		build();

		scanf("%s", str);

		int res = 0;
		for (int i = 0, j = 0; str[i]; i ++ )
		{
			int t = str[i] - 'a';
			j = tr[j][t];

			int p = j;
			while (p)
			{
				res += cnt[p];
				cnt[p] = 0;
				p = ne[p];
			}
		}

		printf("%d\n", res);
	}

	return 0;
}

 
*/
int main()
{
    std::cout << "Hello World!\n";
}

 